.. _cmmSxVMoveStart: cmmSxVMoveStart ================== ------------------ SYNOPSYS ``````````` .. code-block:: none VT_I4 cmmSxVMoveStart( [in] VT_I4 Axis, [in] VT_I4 Dir ) DESCRIPTION ````````````` - 작업속도까지 가속한 후에 작업속도를 유지하며 정지함수가 호출될 때까지 지정한 방향으로의 모션을 계속 수행합니다. 이 함수는 모션을 시작시킨 후에 바로 반환됩니다. PARAMETER ``````````` - Axis: 축번호. 축번호는 상수값으로 [cmX1] 부터 0 번째 축을 기준 축으로 임의의 축을 설정할 수 있습니다. \ - Dir : 모션의 방향을 설정합니다. .. csv-table:: :widths: 10 85 :header-rows: 1 :stub-columns: 0 Value, Meaning 0 또는 cmDIR_N, (-) 방향 => Negative direction 1 또는 cmDIR_P, (+) 방향 => Positive direction RETURN VALUE ````````````` +--------------+----------------+ | Value | Meaning | +==============+================+ | 음수 | 수행 실패 | +--------------+----------------+ | cmERR_NONE | 수행 성공 | +--------------+----------------+ EXAMPLE ````````` .. code-block:: :linenos: :emphasize-lines: 5 C/C++ : /*************************************************************** 다음의 예제는 “Jog 이동”을 하는 예입니다. 본 예제에서의 “Jog 이동”은 버튼이 눌려진 상태에서는 Axis0 축의 이동을 수행하다가, 버튼이 풀리면 이동을 멈추는 예입니다. **************************************************************/ #include "Cmmsdk.h" #include "CmmsdkDef.h" /*************************************************************** * onprograminitial : 이 함수는 가상의 함수로서 프로그램 초기화 루틴이 * 적용되는 부분을 의미합니다. ***************************************************************/ void OnProgramInitial() { long m_nNumAxes; cmmLoadDll(); if(cmmGnDeviceLoad(cmTRUE, &m_nNumAxes) != cmERR_NONE) { //Handle 은 사용자가 생성한 폼의 핸들 값입니다. cmmErrShowLast(Handle); return; } } /************************************************************** * OnSetSpeed(): 이 함수는 속도설정의 변경이 필요할 때 호출되는 가상의 함수입니다. * 이때 m_fVwork, m_fAcc, m_fDec 변수를 통하여 속도, 가속도, 감속도 값이 * 적절하게 전달된다고 가정합니다. **************************************************************/ void OnSetSpeed() { //첫 번째 축(Axis)의 기본 속도를 설정 합니다. cmmCfgSetSpeedPattern(cmX1, cmSMODE_S, m_fVwork, m_fAcc, m_fDec ); } /************************************************************** * OnPlusButtonDown() : (+)Move 버튼이 눌렸을 때 호출되는 가상의 함수 * 이 함수에서 (+)방향으로 V-Move 를 시작합니다. **************************************************************/ void OnPlusButtonDown () { cmmSxVMoveStart(cmX1, cmDIR_P);//Positive dir V-MOVE } /************************************************************** * OnPlusButtonUp() : (-)Move 버튼이 올라올 때 호출되는 가상의 함수 * 이 함수에서는 V-Move 를 종료합니다. **************************************************************/ void OnPlusButtonUp () { cmmSxStop(cmX1, cmFALSE, cmFALSE); } /************************************************************** * OnMinusButtonDown(): (-)Move 버튼이 눌렸을 때 호출되는 가상의 함수 * 이 함수에서 (+)방향으로 V-Move 를 시작합니다. **************************************************************/ void OnMinusButtonDown() { cmmSxVMoveStart(cmX1, cmDIR_N); // Negative dir V-MOVE } /************************************************************** * OnMinusButtonUp() : (-)Move 버튼이 올라올 때 호출되는 가상의 함수 * 이 함수에서는 V-Move 를 종료합니다. **************************************************************/ void OnMinusButtonUp() { cmmSxStop(cmX1, cmFALSE, cmFALSE); } .. code-block:: :linenos: Visual Basic ‘============================================================= ‘cmmGnDeviceLoad 함수로 장치를 초기화 합니다. ‘============================================================= Private Sub Form_Load() Dim nTotalAxis As Long Dim IRetVal As Long Dim Hwnd As Long '============================================================= ' cmmGnDeviceLoad 함수로 장치를 초기화합니다. IRetVal = cmmGnDeviceLoad(True, nTotalAxis) If IRetVal <> cmERR_NONE Then MsgBox ("cmmGnDeviceLoad has been failed") End If '============================================================= End Sub Private Sub CfgSpeed(nTotalAxis As Long) ‘============================================================= ‘ 이 함수에서 cmmCfgSetSpeedPattern 함수로 속도를 설정하는 것은 ‘ 모든 모션의 기준속도(Standard Speed) 가 됩니다. ‘ 단축 구동을 비롯한 대부분의 모션 동작은 이 기준 속도의 비율로 동작되게 ‘ 됩니다. ‘ 아래 함수는 전체 축에 대해서 임의의 기준 속도를 설정하고 있습니다. ‘============================================================ Call cmmCfgSetSpeedPattern(cmX1, cmSMODE_S, 1000, 2000, 2000) End Sub Private Sub btnStart_Click() ' 지정된 방향으로 연속적 속도 이동을 시작합니다. 이 이동은 ‘ 속도 이동이기 때문에, 정지(停止) 함수가 호출될때까지 계속 이송합니다. Call cmmSxVMoveStart(cmX1, cmDIR_N) End Sub .. code-block:: :linenos: Delphi // * 이 함수는 폼이 생성될때 이벤트에 의해 불려지며 , 장치를 로드하는 함수입니다. procedure OnCreate(); var g_nAxis : LongInt; begin // Load CMMSDK(DLL) Library if ( cmmGnDeviceLoad(cmTRUE,@g_nAxis) <> cmERR_NONE ) then begin // 마지막에 발생한 에러를 화면에 표시합니다. // 함수 인자로는 Form 의 Handle 이 전달됩니다. cmmErrShowLast(Form1.Handle); exit; end end; // * Description : 속도를 설정 하는 함수 procedure btnSetSpeedClick(); var fAccelSpeed : Double; fDecelSpeed : Double; fWorkSpeed : Double; nSMODE : LongInt; begin //각 변수들의 값을 설정 합니다. fWorkSpeed := 50000; fAccelSpeed := 100000; fDecelSpeed := 100000; nSMODE := cmSMODE_S; // 설정된 기준 속도를 실제 SDK 함수에 전달합니다. cmmCfgSetSpeedPattern( cmX1, // 현재 활성화 되어 있는 채널을 선택합니다. nSMODE, // 가감속이 없는 모드와 선형 가감속, S-CURVE 가감속을 설정합니다. fWorkSpeed, // 작업 속도를 설정합니다. fAccelSpeed, // 가속도를 설정합니다. fDecelSpeed); // 감속도를 설정합니다. end; // * Description : // * 이 함수는 버튼 이벤트에 의해 + 방향으로 설정된 거리만큼 [절대좌표]로 // * 이동하는 함수입니다. Procedure btnPositiveClick(); var fWorkSpeedRatio : Double; fAccelSpeedRatio : Double; fDecelSpeedRatio : Double; begin ////////////////////////////////////////////////////////////// // 저희 COMIZOA 에서는 다음과 같은 형태의 함수를 제공합니다. // 가) 지령 펄스 출력과 위치 검출기를 통한 펄스 값 입력의 일치를 위한 제어 // 설명 : 위 함수는 지정된 지령 위치의 펄스 출력을 내보내고, // 위치 검출기를 통해 지령된 위치까지 이송 후에 함수가 반환됩니다. // cmmSxMove [상대좌표] // cmmSxMoveTo [절대좌표] // 나) 지령 펄스 출력 후 바로 종료를 위한 함수 // 설명 : 위 함수는 지정된 지령 위치의 펄스 출력을 내보내고, // 함수가 반환됩니다. // 본 함수를 사용 했을 경우 사용자가 직접 위치 검출기를 통한 // 모션 종료를 판단할 수 있는 함수는 // cmmSxIsDone 혹은 cmmSxWaitDone 함수가 있습니다. // cmmSxMoveStart [상대좌표] // cmmSxMoveToStart [절대좌표] ////////////////////////////////////////////////////////////// //cmmSxSetSpeedRation 를 통하여서 기준 속도와의 비에 따른 실제 구동 // 속도를 설정 합니다. // 여기서 기준 속도란 cmmCfgSetSpeedPattern 함수를 통해 설정된 // 속도를 의미하며, 아래의 cmmSxSetSpeedRatio 함수는 // 단축(Single Axis)를 대상으로 축의 속도를 // 기준 속도 대비 Percent(%) 단위로 입력 받아 설정하는 함수입니다. fAccelSpeedRatio := 100; fDecelSpeedRatio := 100; fWorkSpeedRatio := 100; cmmSxSetSpeedRatio(cmX1 ,cmSMODE_KEEP, fWorkSpeedRatio, fAccelSpeedRatio, fDecelSpeedRatio); cmmSxVMoveStart ( cmX1, cmDIR_N ); end;